﻿<!--
    Mango - Open Source M2M - http://mango.serotoninsoftware.com
    Copyright (C) 2006-2009 Serotonin Software Technologies Inc.
    @author Matthew Lohbihler
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see http://www.gnu.org/licenses/.
 -->

<h1>Обзор</h1>
<p>Источник данных SQL используется для поиска и установки значений в базе данных SQL. Это источник данных, работающий в режиме опроса, который считывает значения на основе заданного периода обновления. </p>

<h1>Возможности подключения </h1>
<p>Возможен доступ к любой базе данных, поддерживаемой JDBC. Для соединения с какой-либо конкретной базой данных необходим специальный <a href="http://developers.sun.com/product/jdbc/drivers" target="_blank">JDBC драйвер </a>. Такие драйверы общедоступны практически для большинства баз данных, включая MySQL, MS SQL Server, IBM DB2, Oracle, Sybase, и многие другие. Драйвер для баз данных MySQL поставляется в комплекте с системой. Чтобы получить информацию о том, где найти подходящий JDBC-драйвер, обратитесь к документации на Ваши базы данных.</p>
<h1>Конфигурация</h1>
<p>Каждый источник данных должен иметь произвольно заданное Имя. Значение Периода обновления определяет частоту чтения базы данных. </p>
<p>Значение <strong>Имя класса драйвера </strong>задает Java-класс, который реализует интерфейс в Вашем JDBC-драйвере. Это значение можно найти в документации на Ваш драйвер. Далее приводится список имен классов драйверов для заданной базы данных, он приводится только для информации. Обратите внимание, что для выполнения соединения обычно требуется установка программы-драйвера на сервер Scada-LTS. Если у Вас возникли проблемы с установкой, пожалуйста, обратитесь к документации на Вашу базу данных.</p>
<ul>
  <li><b>MySQL</b>: com.mysql.jdbc.Driver</li>
  <li><b>Oracle thin driver</b>: oracle.jdbc.driver.OracleDriver</li>
</ul>
<p><strong>Строка соединения</strong> зависит от базы данных, которую вы используете и особенностей ее установки. В документации на Ваш JDBC-драйвер вы найдете информацию о том, как извлекать значения из Вашей базы данных. Значения полей Имя пользователя и Пароль обеспечивают необходимый доступ к базе данных, чтобы установить соединение с этим приложением.</p>
<p>В поле Выражение запроса выбора данных должно быть задано правильное <a href="http://en.wikipedia.org/wiki/SQL" target="_blank">SQL</a>-выражение. SQL является стандартизованным языком для работы с базами данных, но различные базы данных зачастую имеют незначительные отличия или расширения языка, поэтому чтобы правильно построить SQL-выражение, Вам следует обратиться к документации на вашу базу данных.</p>
<p>Чтобы определить способ построения запроса, по строкам или столбцам, используйте флажок <strong>Запрос по строкам</strong>. Так как этот параметр влияет на атрибуты в конфигурации объекта данных, его следует изменять только в случае, если для источника данных не определено ни одного объекта. Ниже приводится более подробная информация о запросах, построенных по строкам и по столбцам.</p>

<h1>Обработка запросов по строкам</h1>
<p>Запросы по строкам выдают результирующее множество, имеющее особую структуру построения данных. Но в тоже время такие запросы позволяют гораздо проще извлекать большой объем однотипных данных по сравнению с запросами по столбцам.<br>
Результирующее множество данных должно иметь следующую структуру: </p>
<ul>
  <li><strong>Первый</strong> столбец: идентификатор строки, используемый для связи с объектами источника данных. Регистр символов не влияет на значение идентификатора ряда.</li>
  <li><strong>Второй</strong> столбец: значение объекта </li>
  <li><strong>Третий</strong> столбец (необязательный): время значения объекта. Если третий столбец не используется, значение времени приравнивается ко времени выполнения опроса. Если третий столбец используется, то значение поля не должно быть равно нулю.</li>
</ul>

<h1>Обработка запросов по столбцам</h1>
<p>Запросы по столбцам используют имя столбца результирующего множества для поиска значения и его времени. Важно понимать, что в запросе по столбцам используется только <strong>первая строка </strong>результирующего множества.</p>
<p>Могут быть случаи, когда запрос по строкам является предпочтительным, но невозможным из-за того, что значения объектов имеют несопоставимый тип данных. В этих случаях можно составить SQL выражение, чтобы перевести запрос по строкам в запрос по столбцам. Обычное выражение для поиска данных в нескольких строках может выглядеть так:</p>
<div><pre style="overflow: auto; width: 95%;">select status from relays
</pre></div>
<p>Чтобы транспонировать такую таблицу для поиска значений в одной строке, можно выполнить следующее (предположим имеется 3 реле):</p>
<div><pre style="overflow: auto; width: 95%;">select
  r1.status as r1status,
  r2.status as r2status,
  r3.status as r3status
from relays r1, relays r2, relays r3
where r1.relayId = 'relay1'
  and r2.relayId = 'relay2'
  and r3.relayId = 'relay3'
</pre></div>
<p>Пожалуйста, обратите внимание, что данные примеры приводятся только для информации. В Вашей базе данных, возможно, потребуется другое решение.</p>

<h1>Тестирование выражения запроса выбора данных</h1>
<p>Функция<strong> Тестирование выражения</strong> может использоваться как для проверки значений Вашей конфигурации, так и для тестирования SQL выражения запроса выбора данных. При нажатии кнопки Выполнить, осуществляется попытка установки соединения с Вашей базой данных. В случае успешного соединения, SQL-запрос будет выполнен. Любые ошибки, возникающие при выполнении запроса, выводятся на экран. Если SQL выражение работает корректно, результат будет отражен на экране в зависимости от того, как построен запрос – по строкам или по столбцам. Запросы, построенные по столбцам, выдадут в результате строку для каждого столбца, с указанием имени столбца, типа данных столбца (в круглых скобках, с использованием типа JDBC), и найденного значения. Результатом запроса по строкам будет таблица, в заголовке которой будут имена столбцов и типы данных, а в строках – данные результирующего множества (до 50 строк).</p>